﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Configuration;
using Entidades.Espectaculos;
using Negocio.Espectaculos;
using System.Text;
using Entidades.General;

public partial class Espectaculos_Gestion_frmProgramacion : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //

        if (!Page.IsPostBack)
        {
            ddlAnio.SelectedValue = DateTime.Now.Year.ToString();
            ddlMes.SelectedValue = DateTime.Now.Month.ToString();

            cargarCalendario();

        }
    }

    private void cargarCalendario()
    {
        int mes = DateTime.Now.Month;
        int anio = DateTime.Now.Year;
        int.TryParse(ddlMes.SelectedValue, out mes);
        int.TryParse(ddlAnio.SelectedValue, out anio);

        //generarCalendario(mes, anio);

        crearTablaCal(mes, anio);
    }

    private void generarCalendario(int mes, int anio)
    {
        DateTime actual = new DateTime(anio, mes, 1);
        int diainicialMes = actual.DayOfWeek.GetHashCode();

        GenUsuario user = (GenUsuario)Session["UserLogin"];
        int idlocal = user.iDLocal;
            
            
        //Convert.ToInt32(ConfigurationManager.AppSettings["idLocal"].ToString());


        List<EspConfiguracion> lista = EspConfiguracionBLL.ListarCofiguracion(idlocal, mes, anio, 1);

        StringBuilder sbCal = new StringBuilder();
        sbCal.Append("<table border='1' align='center' width='80%' style='border: 1 solid black' cellpadding='0' cellspacing='0'>" +
                    "<tr align='center' color:White; font-size:large;'  >" +
                        "<tr align='center' style='font:bold; color:White; font-size:large; background-color:black'  >" +
                            "<td style='width:100px'>Dom</td>" +
                            "<td style='width:100px'>Lun</td>" +
                            "<td style='width:100px'>Mar</td>" +
                            "<td style='width:100px'>Mie</td>" +
                            "<td style='width:100px'>Jue</td>" +
                            "<td style='width:100px'>Vie</td>" +
                            "<td style='width:100px'>Sab</td>" +
                        " </tr>");

        bool inicio = false;
        //TableRow row;


        for (int j = 0; j <= 5; j++) //semanas
        {
            sbCal.Append("<tr style='height:50px' align='center' valign=top'>");

            //row = new TableRow();
            //tblCalendario.Rows.Add(row);

            for (int i = 0; i <= 6; i++) // dias
            {
                if (inicio == false)
                {
                    if (i == diainicialMes)//primer dia del mes
                    {
                        sbCal.Append(validarConfiguracion(actual, lista));

                        actual = actual.AddDays(1);
                        inicio = true;
                    }
                    else
                    {
                        //TableCell cell = new TableCell();
                        //cell.Text = "--";
                        //row.Cells.Add(cell);

                        sbCal.Append("<td>--</td>");
                    }
                }
                else //dias siguientes del mes
                {
                    if (actual.Month == mes)
                    {
                        sbCal.Append(validarConfiguracion(actual, lista));

                        //TableCell cell = new TableCell();
                        //cell.Text = validarConfiguracion(actual, lista);
                        //row.Cells.Add(cell);
                    }
                    else
                    {
                        sbCal.Append("<td>--</td>");
                        //TableCell cell = new TableCell();
                        //cell.Text = "--";
                        //row.Cells.Add(cell);
                    }
                    actual = actual.AddDays(1);

                }
            }
            sbCal.Append("</tr>");
        }

        //sbCal.Append("</table>");
        ltrCalendar.Text = sbCal.ToString();
    }

    private void crearTablaCal(int mes, int anio)
    {
        DateTime actual = new DateTime(anio, mes, 1);
        int diainicialMes = actual.DayOfWeek.GetHashCode();
        int idlocal = Convert.ToInt32(ConfigurationManager.AppSettings["idLocal"].ToString());
        List<EspConfiguracion> lista = EspConfiguracionBLL.ListarCofiguracion(idlocal, mes, anio, 1);
        List<EspEspectaculo> espect = EspEspectaculoBLL.ListarEspectaculo(-1, DateTime.MinValue, idlocal);

        bool inicio = false;
        TableRow row;

        for (int j = 0; j <= 5; j++) //semanas
        {

            row = new TableRow();


            for (int i = 0; i <= 6; i++) // dias
            {
                TableCell cel = new TableCell();


                if (inicio == false)
                {
                    if (i == diainicialMes)//primer dia del mes
                    {
                        cel = validarConfiguracion2(actual, lista, espect);
                        actual = actual.AddDays(1);
                        inicio = true;
                    }
                    else
                    {
                        cel.Text = "--";

                    }
                }
                else //dias siguientes del mes
                {
                    if (actual.Month == mes)
                    {
                        cel = validarConfiguracion2(actual, lista, espect);
                    }
                    else
                    {
                        cel.Text = "--";
                    }
                    actual = actual.AddDays(1);
                }

                cel.BorderStyle = BorderStyle.Solid;
                cel.BorderWidth = Unit.Pixel(1);
                cel.Font.Bold = true;
                cel.Font.Size = FontUnit.Larger;
                cel.HorizontalAlign = HorizontalAlign.Center;
                cel.VerticalAlign = VerticalAlign.Middle;
                cel.Height = Unit.Pixel(70);
                cel.Width = Unit.Pixel(100);

                row.Cells.Add(cel);
            }

            tblCalendario.Rows.Add(row);
        }
    }

    private string validarConfiguracion(DateTime fechaActual, List<EspConfiguracion> listaConf)
    {

        string result = "";
        string estilo = "";
        EspConfiguracion obj = listaConf.Find(delegate(EspConfiguracion conf) { return conf.Fecha == fechaActual; });

        if (obj == null)
        {
            if (fechaActual >= DateTime.Now.AddDays(-1))
            {
                estilo = "style='background-color:lightgreen;font-size:large;cursor:pointer;' ";
                // result = "<td " + estilo + ">" + "<a href='javascript:openModal(" + fechaActual.Day + ",1);' >" + fechaActual.Day.ToString() + "</a>" + "</td>";
                result = "<td " + estilo + " onclick=\"openModal('" + fechaActual.ToShortDateString() + "','1');\" >" + fechaActual.Day.ToString() + "</td>";

            }
            else
            {
                estilo = "style='background-color:grey;font-size:large;cursor:pointer;' ";
                // result = "<td " + estilo + ">" + "<a href='javascript:openModal(" + fechaActual.Day + ",0);' >" + fechaActual.Day.ToString() + "</a>" + "</td>";
                result = "<td " + estilo + " onclick=\"openModal('" + fechaActual.ToShortDateString() + "','0');\" >" + fechaActual.Day.ToString() + "</td>";
            }
        }
        else
        {
            estilo = "style='background-color:#FF0000;font-size:large;' ";
            result = "<td " + estilo + " ><p title='" + obj.Motivo + "'> " + fechaActual.Day.ToString() + "</p></td>";

        }



        return result;
    }

    private TableCell validarConfiguracion2(DateTime fechaActual, List<EspConfiguracion> listaConf, List<EspEspectaculo> espect)
    {
        TableCell cel = new TableCell();
        EspConfiguracion obj = listaConf.Find(delegate(EspConfiguracion conf) { return conf.Fecha == fechaActual; });
        EspEspectaculo esp = espect.Find(delegate(EspEspectaculo es) { return es.Fecha == fechaActual; });

        //configuracion
        if (obj == null)
        {
            if (fechaActual >= DateTime.Now.AddDays(-1))
            {
                cel.Style.Add("background-color", "lightgreen");
                cel.Text = fechaActual.Day.ToString();
                cel.Attributes.Add("onclick", "openModal('" + fechaActual.ToShortDateString() + "','1');");
            }
            else
            {
                cel.Style.Add("background-color", "grey");
                cel.Text = fechaActual.Day.ToString();
                cel.Attributes.Add("onclick", "openModal('" + fechaActual.ToShortDateString() + "','0');");
            }
            cel.Style.Add("cursor", "pointer");
        }
        else
        {
            cel.Style.Add("background-color", "#FF0000");
            cel.ToolTip = obj.Motivo;
            cel.Text = fechaActual.Day.ToString();
        }
        string imagen = "";
        //programacion existente
        if (esp != null)
        {
            //Image img = new Image();
            //img.ID = fechaActual.ToOADate().ToString();
            if (fechaActual >= DateTime.Now.AddDays(-1))
            {
                imagen = "../Images/botones/flag_green.gif";
            }
            else
            {
                imagen = "../Images/botones/flag_red.gif";
            }
            //cel.Controls.Add(img); 
            cel.Text = cel.Text + "<br />" + "<img alt='' src='" + imagen + "' />";
        }
        return cel;
    }


    protected void ddlMes_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            if (Page.AutoPostBackControl == ddlMes)
            {
                cargarCalendario();

            }
        }
        catch (Exception ex)
        {

            throw ex;
        }
    }

    protected void ddlAnio_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            if (Page.AutoPostBackControl == ddlAnio)
            {
                cargarCalendario();
            }
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }

    protected void btnProgramar_Click(object sender, EventArgs e)
    {
        Response.Redirect("frmRegistroProgramacion.aspx?fecha=" + hdFecha.Value);
    }

    protected void btnCargarGrid_Click(object sender, EventArgs e)
    {
        cargarEspectaculo();

        mpeProgView.Show();

        cargarCalendario();
    }

    private void cargarEspectaculo()
    {
        int idlocal = Convert.ToInt32(ConfigurationManager.AppSettings["idLocal"].ToString());
        grvEspec.DataSource = EspEspectaculoBLL.ListarEspectaculo(-1, Convert.ToDateTime(hdFecha.Value), idlocal);
        grvEspec.DataBind();

    }

    protected void ibtnEliminar_Click(object sender, EventArgs e)
    {
        ImageButton ibtnEliminar = (ImageButton)sender;
        int index = Convert.ToInt32(ibtnEliminar.CommandArgument);
        int IdEspectaculo = Convert.ToInt32(grvEspec.DataKeys[index].Values["IdEspectaculo"].ToString());

        int result = EspEspectaculoBLL.EliminarEspectaculo(IdEspectaculo);
        if (result > 0)
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('La operación se completó correctamente.')", true);
        }
        else
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "info", "alert('Ocurrió un problema.')", true);
        }


        cargarEspectaculo();

        mpeProgView.Show();

        cargarCalendario();
    }

    protected void grvEspec_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem != null)
        {
            ImageButton ibtnEliminar = (ImageButton)e.Row.FindControl("ibtnEliminar");
            ibtnEliminar.CommandArgument = e.Row.RowIndex.ToString();

            DateTime Fecha = Convert.ToDateTime(grvEspec.DataKeys[e.Row.RowIndex].Values["Fecha"].ToString());
            if (Fecha <= DateTime.Now.AddDays(-1))
            {
                ibtnEliminar.Enabled = false;
                ibtnEliminar.ToolTip = "No se puede eliminar el registro";
            }
            else
            {
                ibtnEliminar.ToolTip = "Eliminar espectáculo";

            }

            ImageButton ibtnEditar = (ImageButton)e.Row.FindControl("ibtnEditar");
            ibtnEditar.CommandArgument = e.Row.RowIndex.ToString();

            if (Fecha <= DateTime.Now.AddDays(-1))
            {
                ibtnEditar.ToolTip = "Ver programación de espectáculo";
            }
            else
            {
                ibtnEditar.ToolTip = "Editar programación de espectáculo";

            }

        }
    }

    protected void ibtnEditar_Click(object sender, EventArgs e)
    {
        ImageButton ibtnEditar = (ImageButton)sender;
        int index = Convert.ToInt32(ibtnEditar.CommandArgument);
        string IdEspectaculo = grvEspec.DataKeys[index].Values["IdEspectaculo"].ToString();

        DateTime Fecha = Convert.ToDateTime(grvEspec.DataKeys[index].Values["Fecha"].ToString());
        if (Fecha >= DateTime.Now.AddDays(-1))
        {
            Response.Redirect("frmRegistroProgramacion.aspx?id=" + IdEspectaculo + "&ref=edit");
        }
        else
        {
            Response.Redirect("frmRegistroProgramacion.aspx?id=" + IdEspectaculo + "&ref=view");
        }
    }
}